/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package edu.ucue.ptc.gco.dao;

import edu.ucue.ptc.gco.mdl.Empleado;
import edu.ucue.ptc.gco.mdl.ObjetivoEmpleado;
import edu.ucue.ptc.gco.util.NoExisteObjetoException;
import java.util.List;
import javax.ejb.Stateless;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

/**
 *
 * @author Johnny
 */
@Stateless
@Named(value = "empleadoDao")
public class EmpleadoDAO implements EmpleadoDAOLocal {

    @PersistenceContext(unitName = "edu.ucue.gped_gestionpedidosee-ejb_ejb_1.0-SNAPSHOTPU")
    private EntityManager entityManager;

    @Override
    public void crearEmpleado(Empleado empleado) {
        entityManager.persist(empleado);

    }

    @Override
    public void modificarEmpleado(Empleado empleado) {
        entityManager.merge(empleado);
    }

    @Override
    public List<Empleado> listarEmpleado() {
        Query query = entityManager.createQuery("select c from Empleado c where c.estado = 0");
        return query.getResultList();
    }

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")
    @Override
    public Empleado buscarEmpleadoPorCedula(String cedula) {
        Query query = entityManager.createQuery("select c from Empleado c "
                + "where c.cedulaRuc = :pCedulaRuc and c.estado=0");
        query.setParameter("pCedulaRuc", cedula);
        try {
            List<Empleado> empleado = query.getResultList();
            if (empleado.isEmpty() || empleado == null) {
                return null;
            }
            Empleado emp = empleado.get(0);
            return emp;
        } catch (Exception ex) {
            return null;
        }
    }

    @Override
    public Empleado buscarEmpleadoPorId(int id) {
        Query query = entityManager.createQuery("select c from Empleado c "
                + "where c.idPersona = :pidPersona and c.estado=0");
        query.setParameter("pidPersona", id);
        try {
            List<Empleado> empleado = query.getResultList();
            if (empleado.isEmpty() || empleado == null) {
                return null;
            }
            Empleado emp = empleado.get(0);
            
            return emp;
        } catch (Exception ex) {
            return null;
        }
    }

    @Override
    public void eliminarEmpleadoPorCedula(String cedula) throws NoExisteObjetoException {
        Empleado empleado = buscarEmpleadoPorCedula(cedula);
        if (empleado != null) {
            empleado.setEstado(1);
            entityManager.merge(empleado);
        } else {
            throw new NoExisteObjetoException("No existe un empleado con esa cedula");
        }
    }

    @Override
    public void eliminarEmpleadoPorId(int id) throws NoExisteObjetoException {
        Empleado empleado = buscarEmpleadoPorId(id);
        if (empleado != null) {
            empleado.setEstado(1);
            entityManager.merge(empleado);
        } else {
            throw new NoExisteObjetoException("No existe un empleado con ese id");
        }
    }

    @Override
    public void eliminarEmpleado(Empleado empleado) {
        empleado.setEstado(1);
        entityManager.merge(empleado);
    }
}
